package com.kaikeba.dao;

import com.kaikeba.bean.Express;
import com.kaikeba.exception.CodeException;
import java.util.List;
import java.util.Map;

public interface ExpressDao {

    /**
     * 用户返回控制台中所需的数据
     * [{总数：xxx，今日新增：xxx}，{待取总数：xxx，待取今日新增数：xxx}]
     * @return
     */
    List<Map<String,Integer>> console();

    /**
     * 查找全部快递并根据参数判断是否分页
     * @param limit 是否分页 true（默认）分页  false 不分页
     * @param offset 起始索引
     * @param pageNumber 单页显示数量
     * @return
     */
    List<Express> findAll(boolean limit,int offset,int pageNumber);

    /**
     * 根据单号查询快递信息
     * @param number 快递单号
     * @return
     */
    Express findByNumber(String number);

    /**
     * 根据取件码查询快递信息
     * @param code  取件码
     * @return
     */
    Express findByCode(String code);


    /**
     * 根据用户电话号码查询快递信息
     * @param userPhone  用户电话号码
     * @return
     */
    List<Express>  findByUserPhone(String userPhone);

    /**
     * 根据用户电话号码和状态查询对应状态的快递信息（取件或待取）
     * @param userPhone  用户电话号码
     * @param status 快递状态码
     * @return
     */
    List<Express>  findByUserPhoneAndStatus(String userPhone,int status);


    /**
     * 根据录入人的手机号，查询快递单号
     * @param sysPhone  录入人手机号
     * @return
     */
    List<Express> findAllBySysPhone(String sysPhone);

    /**
     * 快递录入
     * @param e 录入的快递对象
     * @return  录入的结果，true表示成功，false表示失败
     */
    boolean insert (Express e) throws CodeException;


    /**
     * 快递的修改
     * @param id 要修改的快递id
     * @param newExpress 新的快递对象（number，company,username,userPhone）
     * @return 修改的结果，true表示成功，false表示失败
     */
    boolean update(int id,Express newExpress);


    /**
     * 快递删除
     * @param id 需要删除的快递id
     * @return
     */
    boolean delete(int id);

    /**
     * 更改快递的状态为1，设置取出时间，并设置取件码为空，表示取件完成
     * @param code 要修改的快递取件码
     * @return 修改的结果，true表示成功，false表示失败
     */
    boolean updateStatus(String code);

}
